#pragma once

#include "ddclconfig.h"

typedef struct tag_ddcl_SHA1Ctx{
    dduint32 state[5];
    dduint32 count[2];
    dduint8  buffer[64];
}ddcl_SHA1Ctx;
#define DDCL_SHA1_DIGEST_SIZE 20
#define DDCL_SHA1_STRING_SIZE 41

DDCLAPI void
ddcl_init_sha1 (ddcl_SHA1Ctx * ctx);

DDCLAPI void
ddcl_update_sha1 (
        ddcl_SHA1Ctx * ctx,
        const dduint8 * data,
        const dduint32 len);

DDCLAPI void
ddcl_final_sha1 (
        ddcl_SHA1Ctx * ctx,
        dduint8 digest[DDCL_SHA1_DIGEST_SIZE]);

DDCLAPI void
ddcl_tostring_sha1 (
        const dduint8 digest[DDCL_SHA1_DIGEST_SIZE],
        dduint8 str[DDCL_SHA1_STRING_SIZE]);

DDCLAPI void
ddcl_hmac_sha1(const char * key, size_t key_sz,
        const char * data, size_t data_sz, dduint8 digest[]);
